import logging
import sys
import os
from datetime import datetime

_logger = None

def setup_logger():  #该方法用于初始化日志记录器
    global _logger  # 全局变量，用于保存日志记录器对象
    if _logger is not None:
        return _logger

    #  如果不存在日志目录，则创建
    log_dir = 'log'
    os.makedirs(log_dir, exist_ok=True)
    #os.makedirs()用于创建目录 exist_ok=True表示如果目录已经存在，不会抛出异常
    # logging.getLogger 用于获取日志记录器对象
    _logger = logging.getLogger('port_scanner')
    # 设置日志记录器级别
    _logger.setLevel(logging.INFO)

    # Create console handler
    console_handler = logging.StreamHandler(sys.stdout)
    console_handler.setLevel(logging.INFO)
    
    # 生成日志文件的文件名，以日期为前缀
    timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
    # 在log 这个文件夹下创建一个文件，文件名为scan_时间戳.log
    log_file = os.path.join(log_dir, f'scan_{timestamp}.log')
    file_handler = logging.FileHandler(log_file) # 创建一个文件句柄
    file_handler.setLevel(logging.DEBUG) # 设置文件句柄的级别
    
    # 设置日志格式
    console_format = logging.Formatter('%(message)s')
    file_format = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') # 设置日志格式
    console_handler.setFormatter(console_format)  # 将日志格式添加到控制台句柄
    file_handler.setFormatter(file_format)  # 将日志格式添加到文件句柄
    
    # Add handlers
    _logger.addHandler(console_handler)
    _logger.addHandler(file_handler)
    
    return _logger

def get_logger():  #该方法用于获取日志记录器对象
    global _logger
    if _logger is None: # 如果日志记录器对象为空，则初始化
        _logger = setup_logger()
    return _logger 